<?php
class MapaController extends CustomController
{

    public function listarRutas()
    {
        // Check if user is logged in
        $this->userLoggedIn();
        $this->isAdmin();
        // Get page and list
        $pageNumber = $this->getPage();
        $rutas = $this->model->getRutas($pageNumber);
        $vars = array(
            'edit_action'     => $this->link(MODULE_MAPA, MODULE_MAPA_EDITAR_RECORRIDO).'?id=',
            'delete_action'   => $this->link(MODULE_MAPA, MODULE_MAPA_BORRAR_RECORRIDO).'?id=',
            'pagination_link' => $this->link(MODULE_MAPA, MODULE_MAPA_LISTAR_RECORRIDOS),
            'rutas'           => $rutas
        );
        $this->view->listarRutas($vars);
    }

    public function nuevaRuta()
    {
        $this->userLoggedIn();
        $this->isAdmin();
        $vars = array(
            'franjas'          => $this->model->getFranjas(),
            'guardar_ruta_url' => $this->link(MODULE_MAPA, MODULE_MAPA_GUARDAR_RECORRIDO),
        );
        $this->view->ruta($vars);
    }

    public function editarRuta()
    {
        $this->userLoggedIn(true);
        $this->isAdmin(true);
        $idRuta = $this->getValue('id');
        if ($ruta = $this->model->getRuta($idRuta))
        {
            // Viajes con ruta
            $viajesConRuta = $this->model->getViajesConRuta($idRuta);
            if (!empty($viajesConRuta))
            {
                $this->error('La ruta no puede ser editada ya que ya est&aacute; siendo utilizada por uno o m&aacute;s viajes pendientes -o en curso-, o ya fue utilizada por uno o m&aacute;s viajes finalizados');
                $this->redirectTo(MODULE_MAPA);
            }
            else
            {
                $vars = array(
                    'ruta'             => $ruta,
                    'franjas'          => $this->model->getFranjas(),
                    'guardar_ruta_url' => $this->link(MODULE_MAPA, MODULE_MAPA_GUARDAR_RECORRIDO),
                );
                $this->view->ruta($vars);
            }
        }
        else
        {
            $this->error('La ruta especificada no existe');
            $this->redirectTo(MODULE_MAPA);
        }
    }

    public function borrarRuta()
    {
        $this->userLoggedIn();
        $this->isAdmin();
        $idRuta = $this->getValue('id');
        if ($ruta = $this->model->getRuta($idRuta))
        {
            // Viajes con ruta
            $viajesConRuta = $this->model->getViajesConRuta($idRuta);
            if (!empty($viajesConRuta))
            {
                $this->error('La ruta no puede ser borrada ya que ya est&aacute; siendo utilizada por uno o m&aacute;s viajes pendientes -o en curso-, o ya fue utiliada por uno o m&aacute;s viajes finalizados');
                $this->redirectTo(MODULE_MAPA);
            }
            else
            {
                if ($this->model->borrarRuta($idRuta))
                {
                    $this->notice("La ruta fue borrada exitosamente.");
                    $this->redirectTo(MODULE_MAPA);
                }
                else
                {
                    $this->error("La ruta no pudo ser borrada.");
                    $this->redirectTo(MODULE_MAPA);
                }
            }
        }
        else
        {
            $this->error('La ruta especificada no existe');
            $this->redirectTo(MODULE_MAPA);
        }
    }

    public function guardarRuta()
    {
        $this->userLoggedIn(true);
        $this->isAdmin(true);
        $ruta = $this->getValue('ruta');
        if (!empty($ruta))
        {
            // Guardar completo
            if (empty($ruta['incomplete']))
            {
                $idRuta = $ruta['idruta'];
                if ((empty($idRuta)) || ($extRuta = $this->model->rutaExists($idRuta)))
                {
                    $errs = array();
                    if (empty($ruta['nombre_ruta'])) $errs [] = 'El nombre de la ruta no puede estar vac&iacute;o';
                    else
                    {
                        if ((!empty($extRuta)) && ($ruta['nombre_ruta'] != $extRuta[$idRuta]['nombre_ruta']) && ($this->model->nombreExists($ruta['nombre_ruta']))) $errs [] = 'El nombre de la ruta ya se encuentra en uso';
                        else if (empty($extRuta) && ($this->model->nombreExists($ruta['nombre_ruta']))) $errs [] = 'El nombre de la ruta ya se encuentra en uso';
                    }
                    if (empty($ruta['camino'])) $errs [] = 'La ruta debe poseer un camino (Dibujar Ruta)';
                    if (empty($ruta['puntos'])) $errs [] = 'La ruta debe poseer puntos de control (Marcar Ruta)';
                    else if (count($ruta['puntos']) < 2) $errs [] = 'La ruta debe poseer por los menos dos puntos de control de inicio y fin de ruta';
                    if (!empty($errs))
                    {
                        $this->jSon(array('response' => 'error', 'msg' => implode('<br/>', $errs)));
                    }
                    else
                    {
                        // Datos de la ruta
                        $rutaCompleta['nombre_ruta'] = $ruta['nombre_ruta'];
                        $rutaCompleta['camino']      = (empty($ruta['camino']))?'':serialize($ruta['camino']);
                        $rutaCompleta['status']      = STATUS_ONLINE;
                        $puntos = (!empty($ruta['puntos']))?$ruta['puntos']:false;
                        if ($idRuta = $this->model->guardarRuta($rutaCompleta, $puntos, $idRuta))
                        {
                            $this->jSon(array('response' => 'ok', 'msg' => 'Ruta guardada exitosamente y lista para su uso.', 'idruta' => $idRuta));
                        }
                        else
                        {
                            $this->jSon(array('response' => 'error', 'msg' => 'Error guardando ruta. Por favor intente nuevamente.'));
                        }
                    }
                }
                else
                {
                    $this->jSon(array('response' => 'error', 'msg' => 'Error guardando ruta. Por favor intente nuevamente.'));
                }
            }
            else
            {
                // Guardar in completo
                if (!empty($ruta['nombre_ruta']))
                {
                    $idRuta = $ruta['idruta'];
                    if ((empty($idRuta)) || ($this->model->rutaExists($idRuta)))
                    {
                        // Datos de la ruta
                        $rutaIncompleta['nombre_ruta'] = $ruta['nombre_ruta'];
                        $rutaIncompleta['camino']      = (empty($ruta['camino']))?'':serialize($ruta['camino']);
                        $rutaIncompleta['status']      = STATUS_PENDING;
                        $puntos = (!empty($ruta['puntos']))?$ruta['puntos']:false;
                        if ($idRuta = $this->model->guardarRuta($rutaIncompleta, $puntos, $idRuta))
                        {
                            $this->jSon(array('response' => 'ok', 'msg' => 'Ruta incompleta guardada exitosamente.', 'idruta' => $idRuta));
                        }
                        else
                        {
                            $this->jSon(array('response' => 'error', 'msg' => 'Error guardando ruta. Por favor intente nuevamente.'));
                        }
                    }
                    else
                    {
                        $this->jSon(array('response' => 'error', 'msg' => 'Error guardando ruta. Por favor intente nuevamente.'));
                    }
                }
                else
                {
                    $this->jSon(array('response' => 'error', 'msg' => 'Para poder guardar la ruta de forma incompleta, debe al menos elegir un nombre.'));
                }
            }
        }
        else
        {
            $this->jSon(array('response' => 'error', 'msg' => 'Error guardando ruta. Por favor intente nuevamente.'));
        }
    }

}
?>